package demo1;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;
/**
 * Spring核心框架，本质上就是一个Bean容器。帮助我们管理项目中所有的类。
 */
public class Demo {
    public static void main(String[] args) throws Exception{
        //需求:调用User的sayHello方法
        //1:传统方式，硬编码
        //优点:效率高，直接
        //缺点:写死了，如果后期出现其他对象则需要修改这里的代码
       User user = new User();
       user.sayHello();

        //2:反射机制
        //优点:灵活
        //缺点:效率，编写大量的反射代码，导致代码的可读性差
       Class cls = Class.forName("demo1.User");
       User user1 = (User) cls.newInstance();
       user1.sayHello();

       /*3.Spring容器
       * 1.创建容器 2.从容器中获取对象
            优点:Spring容器来管理项目中的类，避免了大量的反射代码，并且还提供了IOC,AOP等功能进行灵活的开发

            Spring容器创建时可以指定一个包名，Spring会扫描这个包，将其中所有被@Component注解标注的类纳入
            管理。
         */

        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext("demo1");
        User user2 = context.getBean(User.class);
        user2.sayHello();
    }
}
